import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
import org.fusesource.jansi.AnsiConsole;

public class ConsultaBolsa {
	
	public static void cobolsa() {
		AnsiConsole.out.print("\u001b[2J");
		Scanner dados = new Scanner(System.in);
		SimpleDateFormat dataconver = new SimpleDateFormat("yyyy-MM-dd");
		SimpleDateFormat datamascara = new SimpleDateFormat("dd/MM/yyyy");
		short x=1, seleciona;
		boolean erro;
		long bolsa=0;
		Date dataatual = new Date();
		String data="", id="";
		String databanco = dataconver.format(dataatual);
		System.out.println("___________________________________Hemouna______________________________________");
		System.out.println("______________________________Consulta - Bolsas_________________________________");
		System.out.println("\n\n\n");
		try{
			Class.forName("org.hsqldb.jdbcDriver" ); 	    
			Connection con = DriverManager.getConnection("jdbc:hsqldb:file:Banco/BD", "sa", "");
			Statement stm = con.createStatement();			
			while (x == 1){
				System.out.println(" Deseja pesquisar por");
				System.out.println("	1 - Tipo de Bolsa");
				System.out.println("	2 - Grupo sanguineo");
				System.out.println("	3 - Numero da bolsa");
				System.out.println("	4 - Dentro da validade");
				System.out.println("	5 - Fora da validade");
				System.out.println("	0 - Voltar");
				seleciona = dados.nextShort();
				switch(seleciona){
					case 1:{
						erro = true;
						System.out.println("\nInforme o tipo de bolsa: ");
						System.out.printf("+-------------------------------------+----------------------------------------+");
						System.out.printf("|      1 - Concentrado de Hemacia     |       2 - Concentrado de Plaqueta      |");
						System.out.printf("+-------------------------------------+----------------------------------------+");
						System.out.printf("|      3 - Plasma                     |       4 - Crioprecipitados             |");
						System.out.printf("+-------------------------------------+----------------------------------------+\n");
						while (erro == true){
							seleciona = dados.nextShort();
							if (seleciona == 1 || seleciona == 2 || seleciona == 3 || seleciona == 4){
								erro = false;
							} else {
								System.out.println("Opcao invalida. Informe outra opcao.");
							}
						}
						ResultSet rs = stm.executeQuery("SELECT bolsadesangue.id, bolsadesangue.validade, sangue.tiposangue, tipobolsa.nomebolsa FROM BOLSADESANGUE join sangue on bolsadesangue.sangue_id = sangue.id join tipobolsa on bolsadesangue.tipobolsa_id = tipobolsa.id where tipobolsa_id ="+seleciona+" order by bolsadesangue.id");
						System.out.printf("+----------------+-----------+-------------------------------+-----------------+");
						System.out.printf("|    N. Bolsa    | Validade  |         Tipo de bolsa         |  Tipo Sanguineo |");
						System.out.printf("+----------------+-----------+-------------------------------+-----------------+");
						while(rs.next()){
							Date validade = rs.getDate("validade");
					        id = rs.getString("id");
					        String tsangue = rs.getString("tiposangue");
					        String tbolsa = rs.getString("nomebolsa");
					        data = datamascara.format(validade);
					        System.out.printf("|"+Espaco.add(id, 15)+"|"+Espaco.add(data, 10)+"|"+Espaco.add(tbolsa, 30)+"| "+Espaco.add(tsangue, 15)+"|");  
					    }
						break;
					}
					case 2:{
						erro = true;
						System.out.println("\nGrupo sanguineo: ");
						System.out.printf("+----------+--------+--------+--------+--------+---------+---------+-----------+");
						System.out.printf("|   1 - O+ | 2 - O- | 3 - A+ | 4 - A- | 5 - B+ |  6 - B- | 7 - AB+ | 8 - AB-   |");
						System.out.printf("+----------+--------+--------+--------+--------+---------+---------+-----------+\n");
						while (erro == true){
							seleciona = dados.nextShort();
							if (seleciona == 1 || seleciona == 2 || seleciona == 3 || seleciona == 4 || seleciona == 5 || seleciona == 6 || seleciona == 7 || seleciona == 8){
								erro = false;
							} else {
								System.out.println("Opcao invalida. Informe outra opcao.");
							}
						}
						ResultSet rs = stm.executeQuery("SELECT bolsadesangue.id, bolsadesangue.validade, tipobolsa.nomebolsa, sangue.tiposangue FROM BOLSADESANGUE join tipobolsa on bolsadesangue.tipobolsa_id = tipobolsa.id join sangue on bolsadesangue.sangue_id = sangue.id where sangue_id ="+seleciona+" order by bolsadesangue.id");
						System.out.printf("+----------------+-----------+-------------------------------+-----------------+");
						System.out.printf("|    N. Bolsa    | Validade  |         Tipo de bolsa         |  Tipo Sanguineo |");
						System.out.printf("+----------------+-----------+-------------------------------+-----------------+");
						while(rs.next()){
							Date validade = rs.getDate("validade");
					        id = rs.getString("id");
					        String tsangue = rs.getString("tiposangue");
					        String tbolsa = rs.getString("nomebolsa");
					        data = datamascara.format(validade);
					        System.out.printf("|"+Espaco.add(id, 15)+"|"+Espaco.add(data, 10)+"|"+Espaco.add(tbolsa, 30)+"| "+Espaco.add(tsangue, 15)+"|");  
					    }
						break;
					}
					case 3:{
						System.out.print("Numero da bolsa: ");
						erro=true;
						while (erro == true){
							try {
								bolsa = dados.nextLong();
								erro = false;
							} catch (Exception e) {
								System.out.print("Informe somente numeros\n");
								dados.nextLine();
							}
						}
						ResultSet rs = stm.executeQuery("SELECT bolsadesangue.id, bolsadesangue.validade, tipobolsa.nomebolsa, sangue.tiposangue FROM BOLSADESANGUE join tipobolsa on bolsadesangue.tipobolsa_id = tipobolsa.id join sangue on bolsadesangue.sangue_id = sangue.id where id ="+bolsa);
						System.out.printf("+----------------+-----------+-------------------------------+-----------------+");
						System.out.printf("|    N. Bolsa    | Validade  |         Tipo de bolsa         |  Tipo Sanguineo |");
						System.out.printf("+----------------+-----------+-------------------------------+-----------------+");
						while(rs.next()){
							Date validade = rs.getDate("validade");
					        id = rs.getString("id");
					        String tsangue = rs.getString("tiposangue");
					        String tbolsa = rs.getString("nomebolsa");
					        data = datamascara.format(validade);
					        System.out.printf("|"+Espaco.add(id, 15)+"|"+Espaco.add(data, 10)+"|"+Espaco.add(tbolsa, 30)+"| "+Espaco.add(tsangue, 15)+"|");  
					    }
						break;
					}
					case 4:{
						ResultSet rs = stm.executeQuery("SELECT bolsadesangue.id, bolsadesangue.validade, tipobolsa.nomebolsa, sangue.tiposangue FROM BOLSADESANGUE join tipobolsa on bolsadesangue.tipobolsa_id = tipobolsa.id join sangue on bolsadesangue.sangue_id = sangue.id where validade >='"+databanco+"' order by bolsadesangue.validade");
						System.out.printf("+----------------+-----------+-------------------------------+-----------------+");
						System.out.printf("|    N. Bolsa    | Validade  |         Tipo de bolsa         |  Tipo Sanguineo |");
						System.out.printf("+----------------+-----------+-------------------------------+-----------------+");
						while(rs.next()){
					        Date validade = rs.getDate("validade");
					        id = rs.getString("id");
					        String tbolsa = rs.getString("nomebolsa");
					        String tsangue = rs.getString("tiposangue");
					        data = datamascara.format(validade);
					        System.out.printf("|"+Espaco.add(id, 15)+"|"+Espaco.add(data, 10)+"|"+Espaco.add(tbolsa, 30)+"| "+Espaco.add(tsangue, 15)+"|");  
						}
						break;
					}
					case 5:{
						ResultSet rs = stm.executeQuery("SELECT bolsadesangue.id, bolsadesangue.validade, tipobolsa.nomebolsa, sangue.tiposangue FROM BOLSADESANGUE join tipobolsa on bolsadesangue.tipobolsa_id = tipobolsa.id join sangue on bolsadesangue.sangue_id = sangue.id where validade <'"+databanco+"' order by bolsadesangue.validade");
						System.out.printf("+----------------+-----------+-------------------------------+-----------------+");
						System.out.printf("|    N. Bolsa    | Validade  |         Tipo de bolsa         |  Tipo Sanguineo |");
						System.out.printf("+----------------+-----------+-------------------------------+-----------------+");
						while(rs.next()){
					        Date validade = rs.getDate("validade");
					        id = rs.getString("id");
					        String tbolsa = rs.getString("nomebolsa");
					        String tsangue = rs.getString("tiposangue");
					        data = datamascara.format(validade);
					        System.out.printf("|"+Espaco.add(id, 15)+"|"+Espaco.add(data, 10)+"|"+Espaco.add(tbolsa, 30)+"| "+Espaco.add(tsangue, 15)+"|");  
						}
						break;
					}
					case 0:{
						MenuConsulta.meconsulta();
					}
					
					default: System.out.println("Opcao invalida.");
				}				
				
				System.out.printf("+----------------+-----------+-------------------------------+-----------------+");
				System.out.println("\n\nPesquisar outra bolsa? 1-Sim ou 2-Nao");
				x = dados.nextShort();
			}
			stm.execute("SHUTDOWN");
		}catch(ClassNotFoundException e){
		    System.out.println("Erro ao carregar o driver JDBC. ");
		}catch(Exception e){
		    System.out.println("Erro de SQL: "+e);
		    e.printStackTrace();
		}
		MenuConsulta.meconsulta();
	}

}
